package com.gaoqi.mq.TestRabbitMQ;

import com.gaoqi.mq.utils.RabbitMQ;
import com.rabbitmq.client.*;
import lombok.extern.slf4j.Slf4j;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**
 * 该类用于模拟RabbitMQ 中的消费者
 * 生产者和消费者 参数需要保持一致 否则报IO exception
 */
@Slf4j
public class Consumer {

    //测试消费消息 rabbitMQ 简单模式
    public void TestConsumeMessage() throws IOException, TimeoutException {
        //获取RabbitMQ连接对象
        Connection rabbitConnection = RabbitMQ.getRabbitConnection();
        //获取连接通道
        Channel getChannel = rabbitConnection.createChannel();

        //通道绑定对象
        getChannel.queueDeclare("test", true, false, true, null);
        //设置每次只能消费一个 不会出现当一个消费者宕机 出现丢包现象
        getChannel.basicQos(1);

        //消费消息
        //参数1:消费队列名称
        //参数2:是否开启消息自动确认机制  消费者是否自动向rabbitmq 确认消息消费
        //参数3:消费时回调接口
        getChannel.basicConsume("test", true, new DefaultConsumer(getChannel) {
            //参数4:消息队列中获取的消息
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                log.info("获取hello消息队列中的消息:{}", new String(body));
            }
        });

        //消费端一般不关闭通道 和mq 连接对象。
    }


    //测试rabbitMQ 工作模式
    public void rabbitMQ_work() {

    }

    public static void main(String[] args) throws IOException, TimeoutException {

    }
}
